package com.zxy.leetcode._00000_00099._00050_00059;

/**
 * https://leetcode-cn.com/problems/maximum-subarray/
 *
 * 最大子序和
 * 给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
 *
 * 标签：动态规划
 */
public class Test00053 {

    public static void main(String[] args) {
        Test00053 test = new Test00053();
        int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
        System.out.println(test.maxSubArray(nums));
    }

    public int maxSubArray(int[] nums) {
        int preMax = nums[0];
        int max = preMax;

        for (int i=1; i<nums.length; i++) {
            if (preMax >= 0) {
                preMax += nums[i];
            }else {
                preMax = nums[i];
            }

            max = Math.max(max, preMax);
        }

        return max;
    }
}
